package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * This class implements a single square.
 * 
 */
public class FlatComponents implements Serializable{

	public enum Type {
		
		
		KITCHEN,BEDROOM,
		LIVINGROOM,HALL,
		WALL,DOOR,MEAL,SMOKING,TABLE,FLOWERS,ENTRY,UNKNOWN;
		
		
		private int posizione=-1;
	
		private Type(){};
		
		
		
		private void assegnaPosizioneRandom(){
		
			Collections.shuffle(posizioniDisponibili);
			posizione= (int)posizioniDisponibili.remove();
		}
		
		public static void initType(){
			KITCHEN.assegnaPosizioneRandom();
			BEDROOM.assegnaPosizioneRandom();
			LIVINGROOM.assegnaPosizioneRandom();
			HALL.assegnaPosizioneRandom();
		}
		
		/**
		 * Restituisce l'oggetto partendo dalla sua posizione
		 * @param posizione
		 * @return
		 */
		public static Type positionToEnum(int posizione){
			Type [] oggetti=Type.values();

			for(int i=0;i<oggetti.length;i++)
				if(oggetti[i].posizione==posizione)
					return oggetti[i];
			
			return null;
		}
		
		public static void stampaPosizioni(){
			Type [] oggetti=Type.values();

			for(int i=0;i<oggetti.length;i++)
				System.out.println("Oggetto "+oggetti[i]+" Posizione "+oggetti[i].posizione);
			
		}
		
		public int getPosition(){
			return posizione;
		}

		public void setPosizione(int posizione) {
			this.posizione = posizione;
		}
		
		
    }

    public Type type;
    
    static LinkedList<Integer> posizioniDisponibili=new LinkedList<Integer>();
    
  

    public FlatComponents() {
    	
    }

    /**
     * Set the type of the square
     * 
     * @param type CLEAN, DIRTY, OBSTACLE, UNKNOWN
     */
    public FlatComponents(Type type) {
        this.type = type;
    }    

    @Override
    public String toString() {
        return type.toString();
    }

	public Type getType() {
		return type;
	}

	public void setType(Type type) {
		this.type = type;
	}
	
	public static void riempiListaPosizioni(){
		posizioniDisponibili.add(0);posizioniDisponibili.add(2);
		posizioniDisponibili.add(4);posizioniDisponibili.add(6);
	}
	
}
